package dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import beans.User;
/**
 * 基本型UserDao，实现对users表的基本数据库操作：添加、删除、更新和查询。
 * 基本型UserDao继承了基本型BaseDao（BasicBaseDao），所以可以直接使用BasicBaseDao中定义的update和query方法。
 * @author Steven Suo
 * 
 */
public class BasicUserDao extends BasicBaseDao implements DAO<User> {
	/**
	 * 添加user的方法，主要用于用户注册时，userName是唯一的，不能有重复值
	 */
	@Override
	public int insert(User t) {
		String sql = "INSERT INTO tuser (userName,pwd) VALUES (?,?)";
		return basicUpdate(sql, t.getUserName(),t.getPwd());
	}
	/**
	 * 更新用户信息的方法，id和userName是唯一的，不能更新。
	 */
	@Override
	public int update(User t) {
		String sql = "UPDATE tuser SET pwd = ?,realName=?,email=?,address=?,cellphone=?,headPhoto=? WHERE id = ?";
		return basicUpdate(sql, t.getPwd(),t.getRealName(),t.getEmail(),t.getAddress(),t.getCellphone(),t.getHeadPhoto(),t.getId());
	}
	
	/**
	 * 根据id查询用户，返回查找到的TUser对象或null；
	 */
	@Override
	public User findByPK(int id) {
		String sql = "SELECT * FROM tuser WHERE id = ?";
		ResultSet resultSet = basicQuery(sql, id);
		User user = null;
		try {
			while (resultSet.next()) {
				user = new User();
				user.setId(resultSet.getInt(1));
				user.setUserName(resultSet.getString("userName"));
				user.setPwd(resultSet.getString("pwd"));
				user.setRealName(resultSet.getString("realName"));
				user.setEmail(resultSet.getString("email"));
				user.setAddress(resultSet.getString("address"));
				user.setCellphone(resultSet.getString("cellphone"));
				user.setHeadPhoto(resultSet.getString("headPhoto"));
			}
			return user;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} finally {
			DBUtils.close(resultSet);
		}
	}
	/**
	 * 查找所有用户，返回TUser对象的集合，如果没有数据则返回一个空的集合对象。
	 */
	@Override
	public List<User> findAll() {
		String sql = "SELECT * FROM tuser";
		ResultSet resultSet = basicQuery(sql);
		List<User> users = new ArrayList<>();
		try {
			while (resultSet.next()) {
				User user = new User();
				user.setId(resultSet.getInt(1));
				user.setUserName(resultSet.getString("userName"));
				user.setPwd(resultSet.getString("pwd"));
				user.setRealName(resultSet.getString("realName"));
				user.setEmail(resultSet.getString("email"));
				user.setAddress(resultSet.getString("address"));
				user.setCellphone(resultSet.getString("cellphone"));
				user.setHeadPhoto(resultSet.getString("headPhoto"));
				users.add(user);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			DBUtils.close(resultSet);
		}
		return users;
	}
	/**
	 * 根据id删除一个用户
	 */
	@Override
	public int delete(int id) {
		String sql = "DELETE FROM tuser WHERE id = ?";
		return basicUpdate(sql, id);
	}
	/**
	 * 根据sql语句和参数进行查询，该查询方法最多只返回一条记录也就是一个TUser对象，查询不到则返回null；
	 * 跟父类中的basicQuery方法比较只是对结果集进行了处理并返回相应的TUser对象。
	 */
	@Override
	public User findBy(String sql, Object... params) {
		ResultSet resultSet = basicQuery(sql, params);
		User user = null;
		try {
			while (resultSet.next()) {
				user = new User();
				user.setId(resultSet.getInt(1));
				user.setUserName(resultSet.getString("userName"));
				user.setPwd(resultSet.getString("pwd"));
				user.setRealName(resultSet.getString("realName"));
				user.setEmail(resultSet.getString("email"));
				user.setAddress(resultSet.getString("address"));
				user.setCellphone(resultSet.getString("cellphone"));
				user.setHeadPhoto(resultSet.getString("headPhoto"));
			}
			return user;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} finally {
			DBUtils.close(resultSet);
		}
	}
	/**
	 * 根据sql语句和参数进行查询，该查询方法能返回n条记录(n大于等于0)，如果n大于0，则返回TUser对象的集合，反之则返回一个空的集合对象。
	 * 跟父类中的basicQuery方法比较只是对结果集进行了处理返回相应的TUser对象集合。
	 */
	@Override
	public List<User> findListBy(String sql, Object... params) {
		ResultSet resultSet = basicQuery(sql,params);
		List<User> users = new ArrayList<>();
		try {
			while (resultSet.next()) {
				User user = new User();
				user.setId(resultSet.getInt(1));
				user.setUserName(resultSet.getString("userName"));
				user.setPwd(resultSet.getString("pwd"));
				user.setRealName(resultSet.getString("realName"));
				user.setEmail(resultSet.getString("email"));
				user.setAddress(resultSet.getString("address"));
				user.setCellphone(resultSet.getString("cellphone"));
				user.setHeadPhoto(resultSet.getString("headPhoto"));
				users.add(user);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			DBUtils.close(resultSet);
		}
		return users;
	}
	
	
}
